{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# NETWORK CHART(网络图)\n",
    "网络图 （或图表或图形）显示了一组实体之间的互连。每个实体由一个或多个节点表示。节点之间的连接通过链接（或边）表示。网络的理论与实现是一个广阔的研究领域。整个网络都可以致力于此。例如，网络可以是有向的或无向的，加权的或未加权的。有许多不同的输入格式。为了指导您该领域，我建议按照建议的顺序执行以下示例。请注意关于该工具，我主要依靠[NetworkX](https://networkx.github.io/documentation/stable/index.html)库(2.4版本)。但是请注意，还应考虑使用[Graph Tool](https://graph-tool.skewed.de/)，尤其是在涉及高维网络时。该章节主要内容有：\n",
    "1. 来自pandas基础网格图绘制 Basic Network from pandas data frame\n",
    "2. 自定义NetworkX图形外观 Custom NetworkX graph appearance\n",
    "3. 网络布局的可能性 Network layout possibilities\n",
    "4. 有向或无向网络 Directed or Undirected network\n",
    "5. 将颜色映射到网络节点 Map a color to network nodes\n",
    "6. 将颜色映射到网络的边 Map colour to the edges of a Network\n",
    "7. 网络图的背景颜色 Background colour of network chart\n",
    "8. 来自相关性矩阵的网络 Network from correlation matrix\n",
    "NetworkX安装：\n",
    "```python\n",
    "pip install networkx==2.4\n",
    "```\n",
    "本文参考：https://python-graph-gallery.com/network-chart/"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from IPython.core.interactiveshell import InteractiveShell\n",
    "InteractiveShell.ast_node_interactivity = \"all\" "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. 自pandas基础网格图绘制 Basic Network from pandas data frame  \n",
    "该示例可能是您可以实现的最基本的网络图表。网络图由节点组成。这些节点通过边相互连接。因此，基本格式是数据帧，其中每行描述一个连接。在这里，我们用4条线构造一个数据框，描述此图的4个连接！因此，如果您的连接带有一个csv文件，请加载该文件并准备对其进行可视化！FROM表示起点，to表示终点。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# libraries 导入模块\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    A  D\n",
       "1    B  A\n",
       "2    C  E\n",
       "3    A  C"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3X1wVIX97/HPPoRsSAiREB4T5SGSxQewYDUoCogVCbYqRNS5zPRep9c7xVbZJGBrEG37C6JScNprqlelIuqMc/NrVXrBZ6A6La2CEhKyCQFBYsGGQEgC2bBP9w9+iYnZhADZPbtn369/fr/uE19GZz6e7zmfcyzBYDAoAADihNXoAQAAiCSCDwAQVwg+AEBcIfgAAHGF4AMAxBWCDwAQVwg+AEBcIfgAAHGF4AMAxBWCDwAQVwg+AEBcIfgAAHGF4AMAxBWCDwAQV+xGD3C0pU1lO+rkPtKkJo9PqQ67nCNSddfUTKWnJBo9HgDAZCxGPY9v16FGPbu1Vttq6iVJbb5Ax3sOu1VBSTNzMrR4RrYmZ6UZMSIAwIQMCb5Xtx9QySa3PD6/evvTLRbJYbepOM+pRbljIjYfAMC8Ir7qPBN6VWr1Bs762WBQavX6VbKpSpIIPwDABYvoEd+uQ42654XtavX6O16rK71PgVONkuXb62xSrpytIbf8tMt3kxJseuP+XE3KZO0JADh/ET3ie3ZrrTw+f7fXM/JXKGnMVb1+1+Pzq3RrrZ5bdHW4xgMAxIGI1RmOtrRpW019r+f0ehMMSluq69XQ0ta/gwEA4krEgq9sR90F/4ZFUtnOC/8dAED8itiq032kqUtlobP6//wPyWrr+N8XzfofGnTVrd0+5/EF5D7cHLYZAQDmF7Hga/L4enwvY8Hys57j+/Z3vP01EgAgDkVs1Znq6J+MTXUk9MvvAADiU8SCzzkiVYn2C/vjHHarnCMH9dNEAIB4FLFVZ/7UTK39oCbke/Vlv+7S43OMuUrDFizv9rmgpPwpmeEaEQAQByIWfENTEjVjQober/qmS6Uhc/G6Pn3fYpFm5WRw42oAwAWJ6GOJHpiZLYfddvYPhuCw27R4ZnY/TwQAiDcRDb7JWWkqznMqKeHc/liH3ariPCe3KwMAXLCIP4h2Ue4YFedNVFKCTRZL75+1WCRb0K+Uve9p4ZRRkRkQAGBqhjyBfVHuGL1xf67mXDZciXarHN+52tNhtyrRbtWcy4arbPF0jTq1Tz/96U9l0KMDAQAmYtiDaNs1tLSpbGed3Ieb1eTxKtWRIOfIQcqf8u0T2FtaWnTjjTfqrrvu0i9/+UsjxwUAxDjDg6+vvv76a02bNk2rV6/WwoULjR4HABCjYib4JGnXrl26+eab9fbbb2vatGlGjwMAiEGGnOM7X5MnT9b69es1f/587d+/3+hxAAAxKKaCT5Ly8vK0fPlyzZs3T8ePHzd6HABAjImpVWdnS5Ys0e7du7V582YNGDDA6HEAADEiZoPP7/frzjvvVEZGhl588UVZzlYKBABAMbjqbGez2fT666/r888/16pVq4weBwAQIyJ2k+pwSElJ0caNGzVt2jSNHz+emgMA4KxidtXZGTUHAEBfxeyqszNqDgCAvjJF8EnUHAAAfWOKVWdn1BwAAL0xXfC11xyGDh2ql156iZoDAKAL06w627XXHL744gtqDgCAbmK6ztCTlJQU/eUvf1Fubq7GjRunu+++2+iRAABRwnSrzs6oOQAAvst0q87OqDkAAL7L1MEnUXMAAHRl6lVnZ9QcAABSHAUfNQcAgBQHq8521BwAAJJJ6ww9oeYAAIibVWdn1BwAIH7FzaqzM2oOABC/4jL4JGoOABCv4nLV2dmSJUtUXl6ud955h5oDAMSBuA8+ag4AEF/idtXZrnPN4YknnjB6HABAmMVVnaEnnWsO48ePp+YAACYW96vOztprDm+99Zauu+46o8cBAIRB3K86O2uvOSxYsICaAwCYFMH3HdQcAMDcWHX2wOVyadeuXdQcAMBkCL4e+P1+zZ8/X+np6dQcAMBEWHX2wGaz6bXXXtOuXbuoOQCAiVBn6EVKSoo2btxIzQEATIRVZx9QcwAA82DV2QfUHADAPAi+PmqvOeTl5VFzAIAYxqrzHFFzAIDYRvCdo/aaw5AhQ7Ru3TpqDgAQY1h1nqP2mkN5eTk1BwCIQdQZzgM1BwCIXaw6LwA1BwCIPaw6L0DnmsO+ffuMHgcA0AcE3wXKy8vTo48+ytMcACBGsOrsJ9QcACA2EHz9hJoDAMQGVp39hJoDAMQG6gz9iJoDAEQ/Vp1hQM0BAKIXq84woOYAANGL4AsTag4AEJ1YdYaZy+XSF198oXfffZeaAwBEAYIvzKg5AEB0YdUZZjabTa+//rrKy8u1cuVKo8cBgLhHnSECkpOTu9Qc7rnnHqNHAoC4xaozgsrLyzV79mxqDgBgIFadETRp0iRqDgBgMIIvwqg5AICxWHUahJoDABiD4DMINQcAMAarToNQcwAAY1BnMBA1BwCIPFadUaCnmsPRljaV7aiT+0iTmjw+pTrsco5I1V1TM5WekmjgxAAQuwi+KLF582bdd999+uSTT9QyIF3Pbq3Vtpp6SVKbL9DxOYfdqqCkmTkZWjwjW5Oz0gyaGABiE8EXRUpLS7Xm7U9l//5CtfkD6u2fjMUiOew2Fec5tSh3TMRmBIBYxzm+KJI6JU/BrzLl6XSE15NgUGr1+lWyqUqSCD8A6COO+KLErkONuueF7Wr1+ru8frJyq5o+fVPehjpZByQpYfg4DZ62UI6syzs+k5Rg0xv352pSJmtPADgbjviixLNba+XxdQ29pn/+WSe2lyl9zgNyjJ0ii82u1v071Lr3H12Cz+Pzq3RrrZ5bdHWkxwaAmEPwRYGjLW3aVlPf5ZxewHNSjR+/pvR5SzQw59srPQdeeq0GXnptl+8Hg9KW6no1tLRxtScAnAUF9ihQtqOu22tt/3Ir6DutgROm9ek3LJLKdnb/HQBAVwRfFHAfaepSWZAkf2uTrANTZbHa+vQbHl9A7sPN4RgPAEyF4IsCTR5ft9dsSakKnGpSMOAP8Y2efsfbn2MBgCkRfFEg1dH9VGviKKcs9gE6VfP3c/idhP4cCwBMieCLAs4RqUq0d/1HYXUkK+2G/6Zj7z2nUzV/V8DrUdDvU+u+z3R8y7puv+GwW+UcOShSIwNAzKLHFwWOtrTp+ic/6naeT5JaKreo+dO35G04JMuAJCWOyFbqtLvlyJzY5XOJdqv+9vBNXNUJAGdBnSEKDE1J1IwJGXq/6ptutylLuXyWUi6f1ev3LRZpVk4GoQcAfcCqM0o8MDNbDnvfruD8LofdpsUzs/t5IgAwJ4IvSkzOSlNxnlNJCef2jyTRblFxnpPblQFAHxF8UWRR7hgV501UUoJNFkvvn7VYJLslIP+n/1fzcgZHZkAAMAGCL8osyh2jN+7P1ZzLhivRbpXjO1d7OuxWJdqtmnPZcP1p8Q360WUXaf78+Tp9+rRBEwNAbOGqzijW0NKmsp11ch9uVpPHq1RHgpwjByl/yrdPYPf7/Zo/f74uuugi/fGPf5TlbIeKABDnCD4TOHnypG688UbNnz9fxcXFRo8DAFGNOoMJJCcna+PGjZo2bZrGjRune++91+iRACBqccRnIuXl5Zo9e7befPNNXX/99UaPAwBRiYtbTGTSpEl65ZVXtGDBAu3bt8/ocQAgKhF8JjN37lw99thjmjdvno4dO2b0OAAQdVh1mlRBQYE+//xzvfvuuxowYIDR4wBA1CD4TMrv92vBggVKS0uj5gAAnbDqNCmbzabXXntNFRUVWrlypdHjAEDUoM5gYsnJyXr77bepOQBAJ6w640B5ebluvvlm/fnPf6bmACDuseqMA5MmTdL69eupOQCACL64Qc0BAM5g1RlnqDkAiHcEX5yh5gAg3rHqjDOdaw4lJSVGjwMAEUedIQ51rjmMHz+emgOAuMKqM45RcwAQj1h1xrH2pznk5+dTcwAQNwi+OHfrrbdqxYoV1BwAxA1WnZAkFRYWaufOndQcAJgewQdJ1BwAxA9WnZBEzQFA/KDOgA7JycnauHGjcnNzqTkAMC1WneimvLxcs2fP1ptvvknNAYDpsOpEN5MmTdKGDRuoOQAwJYIPIVFzAGBWrDrRK2oOAMyG4EOvqDkAMBtWnegVNQcAZkOdAWdFzQGAmbDqRJ/xNAcAZsCqE33G0xwAmAHBh3NCzQFArGPVifNCzQFArCL4cF78fr/y8/M1ePBgag4AYgqrTpwXm82mV199lZoDgJhDnQHnjZoDgFjEqhMXjJoDgFjCqhMXrL3msGDBAtXW1ho9DgD0iuBDv7j11lv12GOPUXMAEPVYdaJfUXMAEO0IPvQrag4Aoh2rTvQrag4Aoh11BvQ7ag4AohmrToTN7t27NXv2bGoOAKIKq06EzZVXXqkNGzYoPz+fmgOAqEHwIazmzJlDzQFAVGHViYgoKirSZ599pvfee4+aAwBDEXyIiPaaQ2pqql5++WVqDgAMw6oTEdFec6isrKTmAMBQ1BkQMdQcAEQDVp2IOGoOAIzEqhMRR80BgJEIPhiCmgMAo7DqhKGoOQCINIIPhqLmACDSWHXCUO01hz179lBzABAR1BlguOTkZL399tvUHABEBKtORA1qDgAigVUnogY1BwCRQPAhqsyZM0ePP/44NQcAYcOqE1GJmgOAcCH4EJWoOQAIF1adiErUHACEC3UGRC1qDgDCgVUnol57zeFPf/qTpk+fbvQ4AGIcq05EPWoOAPoTwYeYMGfOHP3qV7+i5gDggrHqREyh5gDgQhF8iCmBQED5+fkaNGgQNQcA54VVJ2KK1Wql5gDgglBnQMwZOHCgNm7cSM0BwHlh1YmYVVFRoZtuuomaA4BzwqoTMeuKK67Qhg0bdNddd1FzANBnBB9iGk9zAHCuWHXCFKg5AOgrgg+mQM0BQF8RfDCNU6dOacaMGbr99tu1fPnyjtePtrSpbEed3Eea1OTxKdVhl3NEqu6amqn0lEQDJwZgBIIPpnLkyBHl5ubqiSee0GXT5+rZrbXaVlMvSWrzBTo+57BbFZQ0MydDi2dka3JWmkETA4g0gg+mU1FRoR8s/rUG3fhjeQNSb/+GWyySw25TcZ5Ti3LHRGxGAMahwA7T+aIlRYNu+LFO+8/+2WBQavX6VbKpSpIIPyAOUGeAqew61KiSTW6dDnR/78hrv9ChtXcr6PN2e6/VG1DJJrfK6xojMCUAIxF8MJVnt9bK4+t+qOdr/EZtdXski0Wnav8R8rsen1+lWynCA2ZH8ME0jra0aVtNfchzei0VHylxVI6Sr5ytk7s/DPn9YFDaUl2vhpa2ME8KwEgEH0yjbEddj++drPhIyZfPVPLls9T65U75Tx4P+TmLpLKdPf8OgNhH8ME03EeaulQW2nkOVcrX9G8NdE5X4ohs2dNG6mTltpC/4fEF5D7cHO5RARiI4INpNHl8IV8/WfGhksZ+T7aBgyVJyZfNUEtF6HWnJJ1oPR2W+QBEB+oMMI1UR/d/nQPeNp10fyIFAjr0+0VnXvR5FWg7qdPf7NeA4eO6fef/vVmmyWv/p5xOp3Jycjr+b05OjlJSUsL91wAQZgQfTMM5IlWJ9iNd1p2te7fLYrFq5E/+tyy2hI7X699cpZaKjzTkO8HnsFtVsPi/6/r0u1VdXS2326233npLbrdbe/fuVXp6ekcYdg7GzMxM7g8KxAju3ALTONrSputWfajT/m//lf7mjRVKGHqxhsz+SZfPnqz6WMc+eF6ZD6yXxWrreD3RbtXfHr4p5D08A4GAvvrqK7nd7o5QbP//m5qaNGHChG5HiRMmTNDAgQPD95cGcM4IPphCS0uLnnrqKb1UY1PC2Kk6c33mubFYpDmXDddzi64+5++eOHFCNTU1XcLQ7XZr3759Gj58eJcwbD9aHDlyJEeJgAEIPsS0QCCgV199VY888ohmzJihH7tW6KG3v1Srtw/3K/uOpASb3rg/V5My+++G1X6/XwcOHAh5lNja2tpx7rDz6vTSSy+Vw+HotxkAdEXwIWb97W9/05IlS2S1WrV27VpNmzZNkvTq9gMq2VSlVm+I+5b1ICnBquK8iRG9V+fx48e7haHb7daXX36p0aNHhzxKHDZsGEeJwAUi+BBzDh48qF/84hf65JNPtGrVKt17772yWrs2c86En1senz/mns7g9Xr15ZdfdgnD6upqVVVVye/3dwvDnJwcZWdn8+R5oI8IPsSMlpYWPfnkkyotLdWDDz6ooqIiJScn9/j58rpGlW6t1Zbqell0ppzerv15fLNyMrR4Zna/rjfD6ejRo13CsP1o8auvvlJWVla3q02dTqeGDh1q9NhAVCH4EPUCgYA2bNigRx55RLNmzdKqVauUmZnZ5+83tLSpbGed3Ieb1eTxKtWRIOfIQcqfYp4nsJ8+fVr79u0LuTq1Wq3drjZ1Op0aN26cEhISzv7jgMkQfIhqn3zyiVwul2w2m5555hnl5uYaPVJMCQaDqq+v7xaGbrdbX3/9tcaMGdPtKDEnJ0dDhgwxenQgbAg+RKWDBw9q2bJl+vvf/95xHo+LOvqXx+NRbW1tyKNEh8MR8ihxzJgxstu57wViG8GHqNLS0qJVq1bpD3/4gx566CEVFRVRAI+wYDCoI0eOdAvD6upqHTlyROPGjQt5gc3gwYONHh3oE4IPUSEQCOiVV15RcXGxbrrpJj3xxBPndB4PkXHq1Cnt3bu32wU21dXVGjRoUMjbuV188cWy2Wxn/3EgQgg+GO7jjz+Wy+VSQkKCnnnmGV177bVGj4RzFAwG9fXXX4c8Sjx69Kiys7O7HSVOmDBBgwYNMnp0xCGCD4Y5cOCAli1bpu3bt+vJJ5/UPffcw3k8E2ppaVFNTU23o8SamhoNGTKkx5t+f7ebCfQXgg8R19zcrFWrVun555/XQw89pMLCQs7jxaFAIKBDhw6FvJ1bY2Njjzf97q27CfQFwYeICQQCWr9+vYqLi/WDH/xAK1eu1OjRo40eC1Goqakp5E2/a2trNWzYsJC3cxs1ahQbA/QJwYeI+Otf/yqXyyWHw6G1a9fqmmuuMXokxCC/36+DBw+GPEo8efJkjzf9TkpKMnp0RBGCD2H15ZdfatmyZfrnP/+pJ598UnfffTf/VY6waGxsDNlJ3L9/v0aNGhXyKHH48OH8+xiHCD6ERXNzs1auXKkXXnhBS5YsUWFhIf/VDUP4fL6QN/12u906ffp0jzf9Tkw0x+3s0B3Bh37l9/u1fv16LV++XLfccotWrlypUaNGGT0WEFJDQ0PIm34fPHhQmZmZIW/nlpGRwVFijCP40G+2bdsml8ulgQMHau3atfr+979v9EjAeTl9+rT2798f8ihRUsijxPHjx3PT7xhB8OGC7d+/X8uWLdOnn36qp556SgsXLuS/iGFK7Tf9DnWUWFdXp0suuSTkUWJ6errRo6MTgg/nrampSStXrtSLL74ol8ulgoICzuMhbrW1tfV40+8BAwaEvOn32LFjuem3AQg+nDO/36+XX35Zjz76qObMmaOSkhLO4wE9CAaD+uabb0Lezu3w4cMaO3ZsyNVpWlpsPBw5FhF8OCdbt26Vy+VSSkqK1q5dq6uvvtrokYCY1dra2uNNv5OTk0Pezu2SSy6JmZt+H21pU9mOOrmPNKnJ41Oqwy7niFTdNdXYh0ATfOiT/fv3a+nSpdqxY4eefvpp5efncx4PCJNgMKh//etfIYv6//73v7vd9Lu9uJ+ammr06JKkXYca9ezWWm2rqZcktfkCHe857FYFJc3MydDiGdmanBX5I1uCD71qampSSUmJXnrpJRUUFMjlcnEeDzDQyZMne7zpd1paWsijxKysrIjd9PvV7QdUssktj8+v3tLFYpEcdpuK85xalDsmIrN1/NkEH0Lx+/1at26dVqxYoblz56qkpEQjR440eiwAPQgEAqqrqwt5lHj8+HFdeumlIW/6nZKS0m8znAm9KrV6A2f/8H9JSrCqOG9iRMOP4EM3W7ZskcvlUmpqqtauXaupU6caPRKAC9Dc3NzjTb+HDh0a8ihx9OjR53Q6Y9ehRt3zwna1ev0dr9WV3qfAqUbJapMsVg0YmqXkK25SylW3ymL59gg0KcGmN+7P1aTMyKw9CT502Ldvn5YuXarPP/9cTz/9tBYsWMB5PMDE/H6/vvrqq5BHic3Nzd3qF+1HiaFOd9y/4TO9X/VNl/VmXel9Ss97UEljrlLAc1KeQxU69sH/kePiKzV03pKOz1ks0pzLhuu5RZG5WI4CCXTixAmVlJRo3bp1Kioq0uuvvy6Hw2H0WADCzGazaezYsRo7dqzmzp3b5b0TJ050CcM33nij46bfI0aM6BKGo8bmaGu1p9dzelZHsgZeeq1syWk68kqRUq+5QwMyxkiSgkFpS3W9GlraInK1J8EXx/x+v1566SWtWLFC8+bN0+7duzmPB0CSNHjwYF1zzTXdHiHm8/l04MCBjiPDnTt36rlt+9SWdb0s9gFn/d3EUTmypQ5V26E9HcEnSRZJZTvr9L9uHN/Pf5PuCL449dFHH8nlciktLU2bNm3SlClTjB4JQAyw2+3Kzs5Wdna2brvtNknSkjc+15tf/KvPv2FLGaKAp7nLax5fQO7DzT18o38RfHGmtrZWS5cu1a5du/T0009r/vz5nMcDcEGaPL5z+ry/uUFWx6AQv+Ptr5F6FZliBwx34sQJLV26VLm5ucrNzdWePXu4eAVAv0h19P0Yqu1wjfzNDUrMvCzE70Tm6RYEn8n5/X49//zzysnJ0fHjx1VRUaGHH36Yi1cA9BvniFQl2nuPk0DbKZ2q/aeOvvWUki+fqQHDxnR532G3yjmy+1FgOLDqNLEPP/xQLpdLQ4YM0ebNm/W9733P6JEAmFD+1Eyt/aAm5Hv1Zb/+rx6fRQnpWUr9/h1K+d7cbp8LSsqfkhnmSc8g+Exo7969Kioq0u7du7V69WrdeeedrDQBhM3QlETNmJDRrceXuXhdn75vsUizcjIiduNqVp0m0tjYqKKiIk2bNk3XX3+99uzZw8UrACLigZnZctjP76kRDrtNi2dm9/NEPSP4TMDn8+m5556T0+nUiRMnVFlZqWXLlnEeD0DETM5KU3GeU0kJ5xYrZ+7V6YzY7cokVp0x74MPPpDL5dLQoUP1zjvv6KqrrjJ6JABxqv1G0zydAWGxd+9eFRYWqrKyUqtXr9Ydd9zBShNAVCiva1Tp1lptqa6XRWfK6e3an8c3KydDi2dmR/RIrx3BF2MaGxv1m9/8RuvXr9fDDz+sBx98UImJxj3JGAB60tDSprKddXIfblaTx6tUR4KcIwcpf4qxT2Bn1RkjfD6fXnjhBT3++OO64447VFlZqeHDhxs9FgD0KD0lMSL33jxXBF8MeP/99+VyuTRs2DC99957mjx5stEjAUDMIviiWHV1tYqKilRVVaXVq1fr9ttv5zweAFwg6gxR6Pjx4yooKND06dM1Y8YMVVZWcvEKAPQTgi+K+Hw+lZaWyul06tSpU6qsrFRRUREXrwBAP2LVGSXee+89uVwujRgxQu+//74mTZpk9EgAYEoEn8Gqq6tVWFio6upqrV69Wj/60Y9YaQJAGLHqNMixY8e0ZMkSTZ8+XbNmzVJFRQUXrwBABBB8Eebz+fTss89q4sSJamtr0549e1RYWMh5PACIEFadEfTuu++qoKBAI0eO1AcffKArr7zS6JEAIO4QfBHgdrtVWFiovXv36re//a1uu+02VpoAYBBWnWF07NgxPfTQQ7rhhhs0e/ZsVVRU6Ic//CGhBwAGIvjCwOv16ve//72cTqe8Xq/27NmjgoICDRgwwOjRACDusersZ++8844KCgo0evRoffTRR7riiiuMHgkA0AnB10+qqqpUWFio2tparVmzRvPmzWOlCQBRiFXnBWpoaNCDDz6oG2+8UbfccosqKiq4eAUAohjBd568Xq9+97vfaeLEifL7/aqqqtKSJUs4jwcAUY5V53nYvHmzCgoKlJWVxXk8AIgxBN85aL/Lyv79+7VmzRrl5eWx0gSAGMOqsw8aGhr085//XDNnztStt96q3bt3c/EKAMQoUx/xHW1pU9mOOrmPNKnJ41Oqwy7niFTdNTVT6Slnvzem1+tVaWmpSkpKtHDhQlVVVSk9PT0CkwMAwsUSDAaDRg/R33YdatSzW2u1raZektTmC3S857BbFZQ0MydDi2dka3JWWrfvB4NBbdq0SYWFhbrkkku0Zs0aXX755ZEaHwAQRqYLvle3H1DJJrc8Pr96+5tZLJLDblNxnlOLcsd0vF5ZWamCggIdPHhQa9as0dy5c1lpAoCJmOoc35nQq1Krt/fQk6RgUGr1+lWyqUqvbj+go0eP6mc/+5lmzZqlefPmaffu3Vy8AgAmZJojvl2HGnXPC9vV6vV3vFZXep8Cpxoli1UWq02JmRM1ZM4DsqdmdPmuXQE1v/lrLbw5V48//jjn8QDAxEwTfPdv+EzvV33T5UivrvQ+pec9qKQxVynoO62Gd0sV8LRo2ILlXb8cDOi6i1P0+uJZkR0aABBxplh1Hm1p07aa+t7P6dkHKNl5vbxHvwrxplU7DnvU0NIWviEBAFHBFMFXtqPurJ8JeD06WfWxEkflhHzfIqls59l/BwAQ20zR43MfaepSWeis/j//Q7LaFDzdKltymoYt/HXIz3l8AbkPN4dzTABAFDBF8DV5fD2+l7Fg+ZlzfAG/Wvf+Q9+8/guN+skfZEu5KMTveMM5JgAgCphi1ZnqOHt+W6w2Dcy5TrJY5amr7OF3Evp7NABAlDFF8DlHpCrR3vtfJRgM6lTNdgU8LUpIz+r2vsNulXPkoHCNCACIEqZYdeZPzdTaD2pCvldf9mvJYpUsFtlTM5R+m0sDMi7p9rmgpPwpmWGeFABgNFME39CURM2YkNGtx5e5eF2fvm+xSLNyMvp042oAQGwzxapTkh6YmS2H3XZe33XYbVo8M7ufJwIARCPTBN/krDQV5zmVlHBuf6WkBKuK85yalNn9KQ0AAPMxxaqzXftTFi7k6QwAAHMzzb06Oyuva1R/HX8pAAAAlUlEQVTp1lptqa6XRWfK6e3an8c3KydDi2dmc6QHAHHGlMHXrqGlTWU76+Q+3Kwmj1epjgQ5Rw5S/pS+PYEdAGA+pg4+AAC+yzQXtwAA0BcEHwAgrhB8AIC4QvABAOIKwQcAiCsEHwAgrhB8AIC4QvABAOIKwQcAiCsEHwAgrhB8AIC4QvABAOIKwQcAiCsEHwAgrvx/6XY5e8iFxjcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Build a dataframe with 4 connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "# 绘制网络图，每次结果可能不一样\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to')\n",
    " \n",
    "# Plot it\n",
    "nx.draw(G, with_labels=True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 自定义NetworkX图形外观 Custom NetworkX graph appearance\n",
    "现在，让我们看一下自定义图表外观的参数。自定义分为三个主要类别：节点，节点标签和边：\n",
    "+ 节点 Nodes\n",
    "+ 标签 Labels\n",
    "+ 边 Edges\n",
    "+ 总结 All"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    A  D\n",
       "1    B  A\n",
       "2    C  E\n",
       "3    A  C"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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+++/r4ceekjBYNB0FADIGRRfjjp9+rQuXryo++67z3QUAMgpFF8Osm1b7733nh5//HE2qwPAFFF8OWj//v3y+Xxqa2szHQUAcg7Fl2NSqZR27drFzeoAME0UX47Zu3ev6uvrVV9fbzoKAOQkii+HRKNRff7553r88cdNRwGAnEXx5ZAPP/xQd999t8rKykxHAYCcRfHliAsXLujIkSN6+OGHTUcBgJxG8eWIHTt26OGHH1YgEDAdBQByGsWXA06ePKm+vj6tWrXKdBQAyHkUn8Nls1nt2LFD69evl9frNR0HAHIexedw3377rQoLC9XS0mI6CgDkBYrPwZLJpD788ENuVgeAGUTxOdhnn32mhQsXav78+aajAEDeoPgcamhoSPv27dO6detMRwGAvELxOdSuXbt0zz33qLS01HQUAMgrFJ8DnT9/XseOHWOzOgDMAorPYWzb1o4dO7R27VoVFRWZjgMAeYfic5gTJ05ocHBQ9957r+koAJCXKD4HYbM6AMw+is9B/vWvf6m4uFjNzc2mowBA3qL4HCKRSOjDDz/kZnUAmGUUn0N8+umnampqUm1trekoAJDXKD4HuHz5sr788ks2qwPAHKD4HGDXrl362c9+pkgkYjoKAOQ9is+wc+fO6cSJE3rooYdMRwEAV6D4DBrdrP7II4+osLDQdBwAcAWKz6Djx48rGo3qnnvuMR0FAFyD4jMkk8mMbVb3ePhnAIC5wiuuId98843C4bCWLFliOgoAuArFZ0AikdDHH3/MzeoAYADFZ8CePXu0ePFi1dTUmI4CAK5D8c2xwcFBff3113rsscdMRwEAV6L45tgHH3yg++67TyUlJaajAIArUXxz6IcfftDp06f14IMPmo4CAK5F8c2Razer+/1+03EAwLUovjly9OhRxeNxrVy50nQUAHA1im8OZDIZvf/++9qwYQOb1QHAMF6F58BXX32l0tJSLV682HQUAHA9im+WjYyMaPfu3dqwYYPpKAAAUXyzbs+ePWpublZ1dbXpKAAAUXyzqr+/X998840effRR01EAAFdRfLPogw8+0OrVqxUOh01HAQBcRfHNku7ubnV1demBBx4wHQUAcA2KbxbYtq333ntPjz76KJvVAcBhKL5Z8N133ymZTGrFihWmowAArkPxzbBMJqOdO3dq48aNbFYHAAfilXmGffnll6qoqFBTU5PpKACACVB8Mygej2vPnj1av3696SgAgJug+GbQ7t271draqqqqKtNRAAA3QfHNkL6+Pn377bd65JFHTEcBANwCxTdDdu7cqTVr1igUCpmOAgC4BYpvBpw9e1bd3d1as2aN6SgAgNug+O7Q6Gb1devWyefzmY4DALgNiu8OdXZ2KpPJqKOjw3QUAMAkUHx3IJ1Oa+fOndqwYYMsyzIdBwAwCRTfHfjiiy9UXV2txsZG01EAAJNE8U1TLBbTJ598wmZ1AMgxFN80ffzxx1q2bJkqKytNRwEATAHFNw29vb06ePAgm9UBIAdRfNOwc+dOPfDAAyouLjYdBQAwRQWmA0zWYDKj7mhK0VRWyaxtLsfAoLr8lapZuEJ7zg2P+5zfYynk86gu5FPE7zWUEABwKzlRfF3RlLqGUrJlrvAkSbZ04uRJNTY2yeO9cbCczNrqS2TUn8iqIexTQ4gN7QDgNI6f6hxMZpxRepIuXLggSaq+ze0Ltmx1DaU0mMzMRSwAwBQ4vvi6o84ovWwmq1OnT2nxokXSJPaq27LVHU3NfjAAwJQ4vviiqazpCJKk7h9+UCgUVqQ0MumvcUp2AMBPHP+Mb6KFLF1DczuSymQy+jGaUk1t0y3/7Ibw+Gd6JhfhAAAm5vgRnxMMDA6qOFQsn8/x7xMAALdB8d1GKpVWbHhYkcjkpzgBAM5F8d1G/0CfSiIReT3sywOAfEDx3cLIyIiSyZRKwmHTUQAAMyRvHlpdv7DkjtnS18cOaHF9g6pK/Dd8eq4X2AAAZgYjvpvo6emRZXlUNW+e6SgAgBlE8U3gymb105PerA4AyB0U3wTOdnerpKREJZES01EAADOM4rtOMplUd/dZNTU1mo4CAJgFFN91vv/+jGpqahQIBExHAQDMAorvGsPDMV26dFELGhaYjgIAmCUU3zVOnTqphoYGFXA0GQDkLYrvqv7+AcVicc2vnW86CgBgFrluaPPm736r+HBUHo9HluVRaUWlFrUtVzSVVVNTkywP+xcAIJ+5rvgkaf2mZ1W7oFGJkRH1dHfp/b++rYJAsVb9bJXpaACAWebqqc7CoiLNb1yk+c3tig/0qb/3gulIAIBZ5urik6Tu7m41NC1SeWWlznefNR0HADDLXF18yURS3d3dampsVLA4pMRI3HQkAMAsc3XxZbIZNTUtUlGgSMPRIRUWsWkdAPKdKxe3jAoEAgoEArp47kfFokOqnl9nOhIAYJa5uviSiYR6urv0+Yc7tKhtucrnVZuOBACYZa4svvffefPqPj5LpeWVWnbvarWsuMd0LADAHHBd8T37n/+b6QgAAINcvbgFAOA+FB8AwFUoPgCAq1B8AABXofgAAK5C8QEAXIXiAwC4CsUHAHAVig8A4Cp5c3JL11DKdAQAQA5gxAcAcBWKDwDgKhQfAMBVKD4AgKs4fnGL32MpmbXHfawh7DOUZmr8Hst0BADAdRw/4gv5HB/xpnI5OwDkK8e/MteFfLKUeyMnS5bqQrkxMgUAN3F88UVzOeRZAAAAiUlEQVT8XjWEc6v8LFlqCPsU8XtNRwEAXMeybdu+/S8zbzCZUXc0pWgqe8MzP6fweyyFfB7VhSg9AHCqnCk+AABmguOnOgEAmEkUHwDAVSg+AICrUHwAAFeh+AAArkLxAQBcheIDALgKxQcAcBWKDwDgKhQfAMBVKD4AgKtQfAAAV6H4AACu8v8B6ddBhH84PIIAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 节点 Nodes\n",
    "\n",
    "# libraries 载入库\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph 建立表格\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to')\n",
    " \n",
    "# Graph with Custom nodes: 自定义表格\n",
    "# with_labels是否显示标签，node_size节点大小，node_color节点颜色，node_shape节点形状，alpha透明度，linewidths线条宽度\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", node_shape=\"s\", alpha=0.5, linewidths=10)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    A  D\n",
       "1    B  A\n",
       "2    C  E\n",
       "3    A  C"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 标签 Labels\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to')\n",
    " \n",
    "# Custom the edges:\n",
    "# font_size标签字体大小，font_color标签字体颜色,font_weight字体形式\n",
    "nx.draw(G, with_labels=True, node_size=1500, font_size=25, font_color=\"yellow\", font_weight=\"bold\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    A  D\n",
       "1    B  A\n",
       "2    C  E\n",
       "3    A  C"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 边 Edges\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to')\n",
    " \n",
    "# Chart with Custom edges:\n",
    "# width边线条宽，edge_color边线条颜色\n",
    "nx.draw(G, with_labels=True, width=10, edge_color=\"skyblue\", style=\"solid\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    A  D\n",
       "1    B  A\n",
       "2    C  E\n",
       "3    A  C"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 总结 All\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to')\n",
    " \n",
    "# All together we can do something fancy\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", node_shape=\"o\", alpha=0.5, linewidths=4, font_size=25, font_color=\"grey\", font_weight=\"bold\", width=2, edge_color=\"grey\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. 网络布局的可能性 Network layout possibilities\n",
    "实际上，有一种算法可以计算每个节点的最佳位置。NetworkX已开发并提出了几种算法。此页面通过采用相同的小型数据集并对其应用不同的布局算法来说明此概念。如果您不知道哪一个最适合您，则默认情况下将其设置为默认值！默认Spring布局"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>E</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>F</td>\n",
       "      <td>F</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>E</td>\n",
       "      <td>G</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>G</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>G</td>\n",
       "      <td>B</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>D</td>\n",
       "      <td>G</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>F</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   from to\n",
       "0     A  D\n",
       "1     B  A\n",
       "2     C  E\n",
       "3     A  C\n",
       "4     E  A\n",
       "5     F  F\n",
       "6     E  G\n",
       "7     G  D\n",
       "8     G  B\n",
       "9     D  G\n",
       "10    F  C"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A','E','F','E','G','G','D','F'], 'to':['D', 'A', 'E','C','A','F','G','D','B','G','C']})\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'fruchterman_reingold')"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Fruchterman Reingold Fruchterman Reingold引导布局算法布局\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", pos=nx.fruchterman_reingold_layout(G))\n",
    "plt.title(\"fruchterman_reingold\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'circular')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Circular 环形布局\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", pos=nx.circular_layout(G))\n",
    "plt.title(\"circular\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'random')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Random 随机布局\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", pos=nx.random_layout(G))\n",
    "plt.title(\"random\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'spectral')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Spectral 光谱式布局\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", pos=nx.spectral_layout(G))\n",
    "plt.title(\"spectral\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'spring')"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAE+CAYAAADyPXUxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl0U9XePvDnZGpDU1IslKFQkFIQRERQQEBBEC1YBpVBBhGvE9wXEapex+UPvdcLKLfAZVLBkUEBFaGV4lVQBJlUKGWmZSiUgoWWlqakSc7J+f0RW0EZ2uQk5yR5Pmux3ndJe863NDdP9j77u7cgy7IMIiKiMKFTuwAiIqJAYvAREVFYYfAREVFYYfAREVFYYfAREVFYYfAREVFYYfARqejGG2/EDz/8oHYZRGFFYB8fERGFE474iFQgiqLaJRCFLQYfkRemTZuG+Ph4REdHo1WrVli3bh0mT56MwYMHY9iwYYiOjkaHDh2wa9euqu9p1qwZpk2bhnbt2iEqKgqiKKJZs2b47rvvAACTJ0/G0KFDMXr0aERHR+PGG2/EL7/8UvX9O3bswC233ILo6GgMGTIEw4YNw6uvvhrwn50o2DH4iGro4MGDmDNnDn7++WeUlZXhm2++QbNmzQAAq1atwpAhQ1BcXIwRI0Zg0KBBcLlcVd/76aef4uuvv0ZJSQkMBsNfrr169Wo89NBDKCkpwYABAzB+/HgAgNPpxP33348xY8aguLgYw4cPx8qVKwPy8xKFGgYfUQ3p9Xo4HA7s27cPLpcLzZo1Q2JiIgCgY8eOGDx4MIxGI1JTU1FRUYGtW7dWfe+ECRPQpEkTmM3my167e/fu6NevH/R6PR5++OGqEePWrVshiiImTJgAo9GIBx54AJ06dfL/D0sUghh8RDXUokULzJw5E5MnT0ZcXBweeughFBQUAACaNGlS9XU6nQ6NGzeu+rs///3lNGjQoOr/r1WrFioqKiCKIgoKChAfHw9BEKp9LSK6PAYfkRdGjBiBTZs2IS8vD4Ig4IUXXgAAnDhxoupr3G438vPz0ahRo6r/dnFw1UTDhg1x8uRJXLwI++J7EVH1MfiIaujgwYNYv349HA4HIiMjYTabodfrAQC//vorvvzyS4iiiJkzZyIiIgJdunTx+Z6333479Ho95syZA1EUsWrVKmzfvt3n6xKFIwYfUQ05HA68+OKLqFu3Lho0aIDCwkL8+9//BgAMHDgQy5YtQ506dbBo0SJ8+eWXMBqNPt/TZDLhyy+/xPvvv4+YmBgsXrwYKSkpiIiI8PnaROGGDexECpk8eTJyc3OxePHigNyvc+fOGDt2LB599NGA3I8oVHDERxQkNmzYgNOnT0MURXz88cfIzs5GcnKy2mURBZ2/NhIRkSYdPHgQQ4cOhc1mQ2JiIj7//HM0bNhQ7bKIgg6nOomIKKxwqpOIiMIKg4+IiMIKg4+IiMIKg4+IiMIKg4+IiMIKg4+IiMIKg4+IiMIKg4+IiMIKg4+IiMIKtywjorBW5pJwxi7BKcmQZBl6QYBJLyDObIDFyLFBKGLwEVFYsYtuZBdVILfUicIKCaJbhkEQIOOP3RsFCBBlGQadgLhIPVpYTWgXGwmzgUEYCrhXJxGFhYJyF7YX2pFT6oQAQKzBO59BAGQASVYTOsWZ0SjK9zMWST0MPiIKaXbRjbXHbTh83glJBnx5wxMA6AUgsbYJyQkWjgCDFIOPiEJWTqkDGXk2iG4ZkoLvdHoBMOgEpDS1IMkaodyFKSAYfEQUcmRZxvqT5cgqqoDL7b/7GHVA+9hI9IqPgiAI/rsRKYrBR0QhRZZlZB63YX+Jw6+hV8moA1rHRKBvgoXhFyQ4QU1EIWX9yfKAhR4AuNzA/hIH1p8sD8wNyWcMPiIKGTmlDr9Pb16Oyw1kFVUgp9QR2BuTVxh8RBQS7KIbGXm2gIdeJZcbyMizwS6qVABVG4OPiELC2uOe1ZtqEt0y1p6wqVoDXRuDj4iCXkG5q6pPT02SDBwudeJUuUvdQuiqGHxEFPS2F9pVD71KkgxsK7SrXQZdBYOPiIKaXXQjp9Tp044sSpIB5JQ6+axPwxh8RBTUsosqoLXuOQGeukibeDoDEQW13FJnjTac/rNp93WArfgMdHo9dDo94pq3QoeUobjtgdHQ6bwbG4iyp67O9Wt5Xxj5DYOPiIJaYYXk8zUembkYLTr3QEXZeRzZsRkZb7+CE7t/xeDXZ6taF/kHpzqJKGiVuSRFWxgio2ujTY9kDJ+6ADsyluF07n6vryW6ZdjUaiqkq2LwEVHQOmOXYPDD/phN2nZA7fqNcGznVq+vYRAEFNpFBasipTD4iChoOSX5kpPTlVS7bgPYS895/f0yZDi10mNBl2DwEVHQkvx4uMz5M6dgttbx+vtl+Lc+8h6Dj4iClt5PxwCd2LsT5wtPoVn7zl5fw3Nau9YaLQjgqk4iCmImvQABAqDQdGeFrQxHd2xBxvRX0L7fEDRIauP1tQQIMOkZfFrE4COioFXPrIeowHTixxNHQafXQ9DpEHd9K3QfORadB4/x6ZqiLCPOzLdYLeJvhYiCVrRRD4NOgOTDIpIXvt6hYEV/MOgEWIx8mqRF/K0QUVCLi9SrXcJlabUuYvARUZBrYTXBoLFHaQbBUxdpE4OPiIJau9hIzZzMUEmGpy7SJgYfEQU1s0GHJKtJMyc0CACSrCaYDXx71Sr+Zogo6HWKM0MrnQN6AegcZ1a7DLoKBh8RBb1GUUYk1japHn56AUi0mtAwyqhuIXRVDD4iCgnJCRYYdOomn0EnoG8Ti6o10LUx+IgoJJgNOqQ0tUCt1jmjDkhpakEkn+1pHn9DRBQykqwRaB8bGfDwM+qA9rGRSLJGBPbG5BUGHxGFlF7xUWgdExGw8DPqgDYxEegVHxWYG5LPBFnmuRlEFFpkWcb6k+XIKqqAPw9Brxzp9YqPgsCTGIIGg4+IQlZOqQMZeTaIbhlKngmrFzwLWVKaWji9GYQYfEQU0uyiG2vyyrCv8DyMEZGALyMz2Q2Xw4E29aLRr1ltNqkHKf7WiCikmQ06OLZ9jZ/n/j/cUCfCM1qrYfYZBM8o74Y6kdi18N84891nDL0gxhEfEYU0WZZx8803Y9q0aejbty/sohvZRRXILXWisEKC6JZhEATIkCHDs+WYAAGiLMOgExAXqUcLqwntYiNhNujwyy+/YODAgcjJyUGtWrXU/vHICww+Igppa9aswUsvvYSsrKzLLkCxudwotItwSjIkWYZe8JycHmc2XPE8vQcffBBdunTB888/7+/yyQ8YfEQU0u68806MGzcOw4cPV+ya+/btQ8+ePZGTkwOr1arYdSkwOElNRCHrp59+Qn5+PoYMGaLoddu0aYN+/fohLS1N0etSYHDER0Qha8CAAejbty/GjRun+LWPHj2KW2+9FQcOHEC9evUUvz75D4OPiELSnj17cPfdd+Po0aMwm/1zTND48eNhMpk48gsyDD4iCkmjR49G69at8dJLL/ntHqdOnULbtm2RlZWFJk2a+O0+pCwGHxGFnLy8PHTo0AGHDx9GTEyMX+/10ksvoaioCO+9955f70PKYfARUciZMGECzGYzpk2b5vd7FRcXo2XLltiyZQuSkpL8fj/yHYOPiELKmTNn0KpVK+zduxcNGzYMyD3ffPNN7NmzB59++mlA7ke+YfARUUh57bXX8Ntvv+Hdd98N2D1tNhtatGiBb775BjfffHPA7kveYfARUcgoKytD8+bNsWXLFrRo0SKg9541axa+++47pKenB/S+VHNsYCeikPHee++hV69eAQ89ABg7diyys7OxefPmgN+baoYjPiIKCQ6HA82bN0d6ejo6dOigSg0ffPABPvnkE3z//fc8mFbDOOIjopCwePFitG3bVrXQAzy9g6dOncK3336rWg10bRzxEVHQkyQJbdq0wbvvvouePXuqWsvy5cvx1ltv4eeff+aoT6M44iOioPfVV1+hTp066NGjh9qlYPDgwXC73Vi5cqXapdAVMPiIKKjJsoypU6fixRdf1MQIS6fT4c0338Srr74KSZLULocug8FHREFt/fr1sNlsGDBggNqlVElOTkZsbCwWL16sdil0GXzGR0RBrU+fPhg5ciTGjBmjdimX2LhxI0aPHo0DBw4gIiJC7XLoIhzxEVHQ+uWXX3DgwAGMGDFC7VL+4o477kDr1q2xcOFCtUuhP+GIj4iC1pAhQ9CtWzdMnDhR7VIua8eOHUhJSUFOTg6ioqLULod+x+AjoqB06NAhdOvWDUePHoXFYlG7nCsaOnQoOnTogBdffFHtUuh3DD4iCkpPPPEE4uPjMXnyZLVLuaoDBw7gjjvuQE5Ojt/PBqTqYfARUdA5efIkbrrpJhw6dAh169ZVu5xr+tvf/oZGjRrhX//6l9qlEBh8RBSEnn/+ebhcLsycOVPtUqql8kT4ffv2oX79+mqXE/YYfEQUVM6dO4fExERkZWUhISFB7XKq7ZlnnoEgCEET1qGMwUdEQeXNN99ETk4OPvroI7VLqZHffvsNbdq0wY4dO9C0aVO1ywlrDD4iChoXLlzA9ddfj++//x5t2rRRu5wae+WVV3D69Gm8//77apcS1hh8RBQ05s6di2+//RZfffWV2qV4paSkBElJSdi0aRNatWqldjlhi8FHREHB5XIhKSkJn332Gbp06aJ2OV6bOnUqdu7ciWXLlqldStjilmVEFBSWLVuGZs2aBXXoAcDTTz+NH3/8ETt27FC7lLDFER8RaZ7b7Ua7du0wffp0JCcnq12Oz+bMmYM1a9ZgzZo1apcSljjiIyLNW7NmDYxGI+699161S1HEE088gf3792Pjxo1qlxKWGHxEpHlaOmhWCREREZg8eTJefvllcNIt8Bh8RKRpmzZtwunTp/Hggw+qXYqiRo0ahaKiIqxdu1btUsIOg4+ING3q1Kl4/vnnYTAY1C5FUXq9Hv/85z/xyiuvwO12q11OWGHwEZFmZWdn49dff8Ujjzyidil+8cADD0Cn0+GLL75Qu5SwwlWdRKRZo0aNwk033YQXXnhB7VL85n//+x8mTJiAPXv2hNyoVqsYfESkSUePHsWtt96KI0eOwGq1ql2O38iyjLvuuguPPPIIHn30UbXLCQsMPiLSpPHjxyM6OhpTpkxRuxS/++mnnzBixAgcOnQIERERapcT8hh8RKQ5hYWFuOGGG7Bv3z40aNBA7XICIiUlBffccw8mTJigdikhj8FHRJrz6quvoqioCPPnz1e7lIDJyspCcnIycnNzYbFY1C4npDH4iEhTzp8/j+bNm2Pbtm1ITExUu5yAGj58OG666Sa8/PLLapcS0hh8RKQp06dPx6+//opPP/1U7VIC7tChQ+jatSsOHTqE6667Tu1yQhaDj4g0w+FwoHnz5vj666/Rvn17tctRxRNPPIG6detecVFPmUvCGbsEpyRDkmXoBQEmvYA4swEWI1uzq4PBR0SasXDhQnzxxRfIzMxUuxTVnDhxAu3bt8fevXvRoEED2EU3sosqkFvqRGGFBNEtwyAIkPHHW7cAAaIsw6ATEBepRwurCe1iI2E2MAgvh8FHRJogSRJat26NBQsWoEePHmqXo6rU1FTAWg93jv4/5JQ6IQAQa/BObRAAGUCS1YROcWY0ijL6q9SgxOAjIk1YsWIF0tLSsHnz5pA5hcEbdtGNVblFyDlXAWNkJADv/y0EAHoBSKxtQnKChSPA3zH4iEh1sizj1ltvxWuvvYaBAweqXY5qckodyMizQXTLkBR8Z9YLgEEnIKWpBUlWNsgz/olIdd999x0qKirQv39/tUtRhSzLWJdvw+pjZXBIyoYeAEgy4JBkrD5WhnX5trA/A5DBR0Sqmzp1Kl544QXodOH3liTLMjKP25BVVAGXn08ncrmBrKIKZB4P7/ALv1cZEWnK9u3bkZubi+HDh6tdiirWnyzH/hKH30OvkssN7C9xYP3J8sDcUIMYfESkqmnTpuHZZ5+F0Rh+Kw9zSh0BGen9WeXIL6fUEdgbawQXtxCRag4cOIA777wTR48eRVRUlNrlBJRddOOdfefgUPqBXg1E6AWMbVMn7FZ7htdPS0Sa8vbbb2P8+PFhF3oAsPa4Z/WmmkS3jLUnbKrWoAYe90tEqsjPz8fKlSuRk5OjdikBV1DuwuHzTsVXb9aUJAOHS504Ve5CwzBqcueIj4hUMWPGDIwZMwaxsbFqlxJw2wvtqodeJUkGthXa1S4joDjiI6KAKy4uxocffojs7Gy1Swk4u+hGTqkTGsk9yABySp2wi+6wedbH4COigJs7dy4GDRqExo0bq11KwGUXVfiwCZnHrm9WYtOSd/Bb7gGYzLVQJz4BHVKGocuQR73a7k34va7O9Wv5WFlwYPARUUCVl5dj9uzZ2LBhg9qlqCK31FmjDaf/bOOiefjx4zkY8OJUtLy9F0y1onDq4G78uGgebhs0EgZTzbckE2VPXQw+IiI/+OCDD9C9e3e0bt1a7VJUUVghef29FWXn8e38aRj6zzlo2/uP7d0a3dAOD735jmp1BRsGHxEFjMvlwvTp07F8+XK1S1FFmUvyqYUhL/tnSC4HWvfoq2BVHqJbhs3lDovDbBl8RBQwn332GRITE9G5c2e1S1HFGbsEgyBA8nLfkAslxagVcx30hj/euueP6YfCIwchupz425xluL5jV6+ubRAEFNpFWIwmr74/mDD4iCgg3G43pk2bhrS0NLVLUY1Tki85Ob2masXUwYWSYkiiWBV+4z5aAwCYktzOp42nZchwaqXHws9Cf0xLRJqQkZEBk8mEPn36qF2Karwd6VVKaHcb9MYI7N+QqVBFf5Dhe33BgiM+IvJamUvCGbsEpyRDkmXoBQEmvYA4s+GSZ0WyLGPKlCl48cUXw/p0db2PP7s52oreTz6HVVNegCzLaNm1F4yRtXA6Zy+c9gs+XVtQoL5gweAjomqzi25kF1Ugt9SJwgrPQg2DIFwyfSdAgCjLMOgExEXq0cJqgu3gTpw9exYPPvigitWrz6QXIEAAfJju7DHmadSOa4gfP56DFa+NhymyFuo0boq+E15Dws23eX1dAZ4PLeGApzMQ0TUVlLuwvdCOnFInBKBGfWgGAXA4nTCXFeKhLjeiURjtCflnZS4J7+w9p5ntyi6mF4BxN17HVZ1EFN7sohtrj9uqNlT25v1alAG90QTXdY2xNKcUibVNSE6whM32WBeLNuph0AmQNJh8Bp0QFqEHcHELEV1BTqkD7+w7h9zznp1GfH2rlvH7DiHnnXhn37mwPQQ1LlKvdgmXpdW6/IHBR0SXkGUZ6/JtWH2sDA5JVnxaTpIBhyRj9bEyrMu3+bQEPxi1sJpg0NijNIPgqStcMPiIqIosy8g8bkNWUQVcbv/ey+UGsooqkHk8vMKvXWykZk5mqCTDU1e4YPARUZX1J8uxv8Th99Cr5HID+0scWH+yPDA31ACzQYckq8nnExqUIgBIsprC6plr+PykRHRVOaWOgIz0/qxy5BdOz/w6xZmhlc4BvQB0jjOrXUZAMfiICHbRjYw8W8BDr5LLDWTk2WAXVSogwBpFGZFY26R6+OkFINFqQsMwazFh8BER1h63+XRqgBJEt4y1J2yq1hBIyQkWGHTqJp9BJ6BvE4uqNaiBwUcU5grKXVV9emqSZOBwqROnyl3qFhIgZoMO0cd2wFXh21Zj3jLqgJSmFkSG0bO9SuH3ExPRJbYX2lUPvUqSDGwrtKtdht/Jsoy33noLb4x/DC3NMgLdN27UAe1jI5Fkrflp7aGAO7cQhTG76EZOqVMzy+tlADmlTthFd8iuMpQkCZMmTcL333+PzZs3Iz4+HpnHbQFbTWvUAW1iItArPsr/N9MoBh9RGMsuqtDMsvpKAjx1da5fS+1SFGe32zFq1CgUFxdj48aNiImJAQD0TbAgQi/4fVVt5UivV3xUWJ+SEZofqYioWnJLnTXacPpK3ntiIF7v0QKi0/eWBFH21BVqiouLcc8998BoNGLt2rVVoQcAgiCgd2MLBjSLRoReUHy1pyC7UWE7jz5xBvRubAnr0AMYfERhrbBC8vka5wqO49jOrRAEAfs3rFWgKmXq0pK8vDx0794dnTt3xtKlSxERcflna0nWCIxtUwctanu2NfM1ngR4tiNrWScSBZ/NwNzJL/h4xdDA4CMKU2UuSZEWhh0Zy5FwU0d06P8Qfk1fpkBlntYGm1pNhQrbtWsXunXrhieffBLTp0+HTnf1t12zQYf7m9fGyCQrWsV4ev1qurenQfD06LWKMWFkkhX3X18bb//7X1i7di3+97//+fDThAY+4yMKU2fsEgyCAMnHfTJ3ZCxD91HjkNC2I+aNSUZZUSGiY+N8uqZBEFBoF2ExBvfGyevWrcPw4cMxZ84cDB06tEbf2zDKiEHXG696+K8Mz6jucof/touNvGSBkNVqxcKFC/HYY49h9+7dsFqtyv6wQYTBRxSmnJJ8ycnp3ji2cytKTuejXZ+BiKoTi9jGzbAr80t0HzXWp+vKkOHUSo+Fl5YsWYLU1FSsWLECPXr08Po6ZoMOnevXqlrsY3O5UWgX4ZRkSLIMveA5OT3ObLjmeXp9+vRBv379kJqaivfff9/rmoIdpzqJwpSvIz3AM9pL6tITUXViAQA3Jz+IHRmf+XxdGcrUp4bKHr2XXnoJ69at8yn0Lsdi1KF5bRNuqBOBG6+LxA11ItC8tqnah8i+/fbbWL9+PdasWaNoXcGEIz6iMKX3cWWfq8KO7G9XQZYkvNmnDQBAdDpRUVaKU4f2oGHLtl5fW1CgPjX8uUevcePGapf0F9HR0Xj//ffxyCOPIDs7G3Xq1FG7pIBj8BGFKZNegAAB3p6tvveHTOh0ekxY9iP0xj82OV76wuPYkbEc96X6Enye6btgcqUePS3q1asXBg4ciEmTJuGjjz5Su5yA41QnUZiqZ9ZD9GE6cUf6Z+g4YDhiGjZGdN36VX9uH/YYsjI/hySKXl9blGXEmYPnc/nVevS0aurUqdi4cSPS09PVLiXgBDmcjj4mokvMyC6CQ4OLSCL0Aia1i1W7jGrJy8tD37590a9fP7z11lvXbFfQkg0bNmDEiBHYvXs3rrvuOrXLCZjg+Q0RkeLiIvVql3BZZ48ewpIlS1BcXKx2KVdV0x49renRowcGDx6MCRMmqF1KQAXXb4mIFNXCaqpxc7S/6SGjvlCB5cuXo1mzZujRowemT5+OAwcOQEsTVOvWrUOfPn2QlpaGiRMnql2O1/79739j27ZtWLlypdqlBAynOonCmF10Y86eYs0cSwR4dhwZ3/Y6mA062O12rF+/HhkZGUhPT4fZbEb//v3Rv39/dO/eHUajOieHV/boLV++XPF2BTVs2rQJQ4cORXZ2NurWrat2OX7H4CMKc18dPY+DJdo4mkiAZ5utQdfX/svfybKMrKwspKenIz09HYcPH8a9996LlJQU9O3bNyDPqGRZxttvv405c+ZgzZo1aNvW+5WrWvPss8+ioKAAn376qdql+B2DjyjMFZS7sOhAMWSd+s/7DAIwMsmKhlHXHskVFBRgzZo1SE9Px/fff49bbrmlajTYqlUrxWu7uEcvMzNTkz16vrDb7bjlllvwr3/9C4MHD1a7HL9i8BGFsbNnz2LSpEkw356CxC53QRbUe+yvFzzPHO+/zGjvWiqnRNPT05GRkYFatWohJSVFsSnRi3v0Vq5cGRTtCt7YunUr7r//fuzatQtxcb7tt6plXNxCFIZkWcbSpUvRtm1bxMXFYcqo+2AyqDviM+gE9G1i8ep7zWYz7rvvPrzzzjs4ceIEli1bhpiYGPzjH/9A/fr1MXz4cCxdutSrVaLB2KPnrS5duuDhhx/G3//+d00tJFIaR3xEYeb48eMYN24cTpw4gYULF6JTp04AgJxSB1YfK/PrCeBXYtQBA5pFI8l6+XPqfFFQUICvv/4a6enp+OGHH2o0JRrMPXreqqiowC233ILJkydj2LBhapfjFww+ojDhdrsxb948vP7665g4cSKef/55mEyXHvuzLt+GrKKKgIafUQe0j41E78bejfZq4nJTov3790dKSspfpkR37dqF++67D88991xQtyt4Y/v27ejfvz927dqFBg0aqF2O4hh8RGFg3759ePzxx6HX67FgwQLccMMNl/06WZaRedyG/SWOgISfUQe0iYlAcoIFQoA3pZZlGTt37qwKwcpVov3790etWrXw5JNPYu7cuRgyZEhA69KKl19+Gfv378eXX34Z8N+NvzH4iEKY0+nElClTMGfOHLzxxht46qmnrjldJ8sy1p8s9/vIr3Kk1ys+ShNvrJVTovPnz0dWVhbatWuHUaNG+W2VqNY5HA507NgRL7/8MkaMGKF2OYoKnl1giahGtm7discffxzNmzfHzp07q738XhAE9G5sQUK0ERl5NohuWdEGd73gWciS0tTil2d63mrYsCGKi4tRVFSEn3/+GadOnUJGRgZ69eqFqKioqueC3bp1U61xPpAiIiLw8ccfo1+/frjrrrvQsGFDtUtSDEd8RCHGZrPhlVdewfLlyzFz5kwMHTrU6xGVXXRj7XEbDp93QpK9PcDIw3PGHpBoNSG5iQVmg3YWikiShIkTJ2LDhg1Ys2bNJR8SLp4STU9Px5EjR6qmRPv27Rvy59m99tpryMrKwqpVqzQxMlcCg48ohKxduxZjx45Fz5498Z///AexscqccHCq3IVthXbklDohABBr8K5hEDyBmWQ1oXOcuVrN6YFkt9sxcuRIlJSUYOXKlbBa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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Spring 跳跃式布局\n",
    "nx.draw(G, with_labels=True, node_size=1500, node_color=\"skyblue\", pos=nx.spring_layout(G))\n",
    "plt.title(\"spring\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. 有向或无向网络 Directed or Undirected network\n",
    "网络图可以在2个主要类别进行分割：有向网络和无向网络。如果它是定向的，那么在两个节点之间就有一个流的概念，这样就留下了一个去其他地方的地方。就像钱从A公司流向B公司一样。这就是为什么你可以看到（某种程度上）左边图表上的箭头，它给出了方向。例如，流量从B流向A。如果它是无向的，则这两个节点之间只有一个链接，例如，先生A和先生B是朋友。\n",
    "生成图形时，必须使用适合您需要的函数：Graph（）用于无向（默认），DiGraph用于有向图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>D</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    D  A\n",
       "1    A  D\n",
       "2    B  A\n",
       "3    C  E\n",
       "4    A  C"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "##  DIRECTED 有向图\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "# This time a pair can appear 2 times, in one side or in the other!\n",
    "df = pd.DataFrame({ 'from':['D', 'A', 'B', 'C','A'], 'to':['A', 'D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph. Note that we use the DiGraph function to create the graph!\n",
    "# create_using=nx.DiGraph()创建有向图,默认是无向图\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.DiGraph())\n",
    " \n",
    "# Make the graph 有向图\n",
    "nx.draw(G, with_labels=True, node_size=1500, alpha=0.3, arrows=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>D</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    D  A\n",
       "1    A  D\n",
       "2    B  A\n",
       "3    C  E\n",
       "4    A  C"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'UN-Directed')"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAE+CAYAAADyPXUxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3WtsXPldN/DvOTNnLj5z823s8SSxY8dxkk2a3WQ317bqowJtEY9Qq0JBgFoJIVUqiJZFXbULVUFoyzsq3iBEhUqlClpoVbSFrQA90ErkftltLhtfM05ie3z33M+Zc3teTOyN105iz5yZM5fvR/KLOPaZn73tfPO//gTLsiwQERG1CNHpAoiIiGqJwUdERC2FwUdERC2FwUdERC2FwUdERC2FwUdERC2FwUdUI5/4xCfwD//wD06XsUUikYAgCNB13elSiGqCwUctRRAETExMbPrc17/+dfz2b/82AOB//ud/IAgCvvCFL2z6mg9+8IP49re//cznyrKMQCCAzs5OfPSjH8X3vve9TV/z1ltv4bOf/aw9P8hT6iei52PwEb2PLMv4zne+g0Qisavve+edd5DNZjE6OorPfe5z+P3f/3382Z/92Y6+l6Mtotph8BG9TyQSwec+97kdh9b7dXV14Xd+53fwN3/zN/jGN76B5eVlAMBHPvIRfOtb3wIAfPvb38b58+fxpS99CR0dHfj6178OAPj7v/97HD58GO3t7fjYxz6G6enpjefeuXMHv/iLv4iOjg709PTgjTfewE9+8hO88cYb+N73vodAIIDjx48DAFKpFH73d38XsVgM8Xgcf/InfwLDMAAAhmHgj//4j9HV1YXBwUH827/9W7m/KqKGxOAj2sbrr7+OH/zgBxgdHS37Gb/6q78KXddx5cqVbf/+8uXLGBwcxMLCAl5//XX86Ec/whtvvIEf/vCHWFxcxIc+9CH85m/+JgAgk8ngF37hF/Dxj38cs7OzmJiYwEc/+lF8/OMfx1e/+lV85jOfQTabxTvvvAMA+OxnPwu3242JiQncvHkT//Ef/7ERun/3d3+HH//4x7h58yauXbuGf/mXfyn7ZyRqRAw+om309vbi85//PL72ta+V/QxJktDV1YWVlZVt/76vrw9/8Ad/ALfbDb/fj7/927/FV77yFRw+fBhutxtf/epX8fbb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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# UNDIRECTED 无向图\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "# This time a pair can appear 2 times, in one side or in the other!\n",
    "df = pd.DataFrame({ 'from':['D', 'A', 'B', 'C','A'], 'to':['A', 'D', 'A', 'E','C']})\n",
    "df\n",
    " \n",
    "# Build your graph. Note that we use the Graph function to create the graph!\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph())\n",
    " \n",
    "# Make the graph\n",
    "nx.draw(G, with_labels=True, node_size=1500, alpha=0.3, arrows=True)\n",
    "plt.title(\"UN-Directed\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. 将颜色映射到网络节点 Map a color to network nodes\n",
    "一个常见的任务是按照节点的功能为网络图表的每个节点着色（我们称其为映射颜色）。它允许在图表中显示更多信息。有两种可能性：\n",
    "1. 您要映射的要素是一个数值。然后，我们将使用连续的色标。在左图上，A比C暗，比B暗。\n",
    "2. 该功能是分类的。在右图上，A和B属于同一组，D和E分组在一起，而C在他的组中单独存在。我们使用了分类色标。\n",
    "\n",
    "通常我们使用2个表。第一个提供节点之间的链接。第二个提供每个节点的功能。您可以如下链接这两个文件。\n",
    "+ 连续颜色\n",
    "+ 分类颜色"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>myvalue</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>D</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>E</td>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  ID myvalue\n",
       "0  A     123\n",
       "1  B      25\n",
       "2  C      76\n",
       "3  D      12\n",
       "4  E      34"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "NodeView(('A', 'D', 'B', 'C', 'E'))"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>myvalue</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>ID</th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>76</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   myvalue\n",
       "ID        \n",
       "A      123\n",
       "D       12\n",
       "B       25\n",
       "C       76\n",
       "E       34"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Continuous color scale 连续颜色\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    " \n",
    "# And a data frame with characteristics for your nodes\n",
    "carac = pd.DataFrame({ 'ID':['A', 'B', 'C','D','E'], 'myvalue':['123','25','76','12','34'] })\n",
    "# 设置值\n",
    "carac\n",
    "# Build your graph 建立图\n",
    "G =nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph() )\n",
    " \n",
    "# The order of the node for networkX is the following order:\n",
    "# 节点顺序\n",
    "G.nodes()\n",
    "# Thus, we cannot give directly the 'myvalue' column to netowrkX, we need to arrange the order!\n",
    "# Here is the tricky part: I need to reorder carac, to assign the good color to each node\n",
    "# 根据myvalue设置颜色,并匹配节点顺序和ID号\n",
    "carac = carac.set_index('ID')\n",
    "carac =carac.reindex(G.nodes())\n",
    "carac\n",
    "# Plot it, providing a continuous color scale with cmap:\n",
    "# node_color设定颜色，输入的必须是float数组或者int值；cmap颜色条\n",
    "nx.draw(G, with_labels=True, node_color=np.array(carac['myvalue'].values,dtype='float32'), cmap=plt.cm.Blues)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "NodeView(('A', 'D', 'B', 'C', 'E'))"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "ID\n",
       "A    0\n",
       "D    2\n",
       "B    0\n",
       "C    1\n",
       "E    2\n",
       "dtype: int8"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## Categorical color scale 连续颜色\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C']})\n",
    " \n",
    "# And a data frame with characteristics for your nodes\n",
    "carac = pd.DataFrame({ 'ID':['A', 'B', 'C','D','E'], 'myvalue':['group1','group1','group2','group3','group3'] })\n",
    " \n",
    "# Build your graph\n",
    "# 建立图\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph() )\n",
    " \n",
    "# The order of the node for networkX is the following order:\n",
    "# 打印节点顺序\n",
    "G.nodes()\n",
    "# Thus, we cannot give directly the 'myvalue' column to netowrkX, we need to arrange the order!\n",
    " \n",
    "# Here is the tricky part: I need to reorder carac to assign the good color to each node\n",
    "carac= carac.set_index('ID')\n",
    "# 根据节点顺序设定值\n",
    "carac=carac.reindex(G.nodes())\n",
    " \n",
    "# And I need to transform my categorical column in a numerical value: group1->1, group2->2...\n",
    "# 设定类别\n",
    "carac['myvalue']=pd.Categorical(carac['myvalue'])\n",
    "carac['myvalue'].cat.codes\n",
    "    \n",
    "# Custom the nodes:\n",
    "nx.draw(G, with_labels=True, node_color=carac['myvalue'].cat.codes, cmap=plt.cm.Set1, node_size=1500)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. 将颜色映射到网络的边 Map colour to the edges of a Network\n",
    "我们假设我们对网络的每个边缘都有一个功能，例如，此功能可以是此链接表示的金额（数字值），也可以是发生在哪个洲（类别值）。我们希望边缘根据此变量而有所不同。\n",
    "+ 数值型 numerical\n",
    "+ 类别型 categorical"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "      <td>10</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to  value\n",
       "0    A  D      1\n",
       "1    B  A     10\n",
       "2    C  E      5\n",
       "3    A  C      5"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 数值型 numerical\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "# value设定链接值\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C'], 'value':[1, 10, 5, 5]})\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph() )\n",
    " \n",
    "# Custom the nodes:\n",
    "# edge_color设置边的颜色\n",
    "nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_color=df['value'], width=10.0, edge_cmap=plt.cm.Blues)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "      <th>value</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "      <td>typeA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "      <td>typeA</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "      <td>typeB</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "      <td>typeB</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to  value\n",
       "0    A  D  typeA\n",
       "1    B  A  typeA\n",
       "2    C  E  typeB\n",
       "3    A  C  typeB"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "0    0\n",
       "1    0\n",
       "2    1\n",
       "3    1\n",
       "dtype: int8"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "## 类别型 categorical\n",
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "# value设置类型\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C'], 'value':['typeA', 'typeA', 'typeB', 'typeB']})\n",
    "df\n",
    " \n",
    "# And I need to transform my categorical column in a numerical value typeA->1, typeB->2...\n",
    "# 转换为类别\n",
    "df['value']=pd.Categorical(df['value'])\n",
    "df['value'].cat.codes\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph() )\n",
    " \n",
    "# Custom the nodes:\n",
    "nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_color=df['value'].cat.codes, width=10.0, edge_cmap=plt.cm.Set2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7. 网络图的背景颜色 Background colour of network chart\n",
    "你可以改变背景颜色您的网络图与  fig.set_facecolor()。 请注意，如果要保留png的背景色，则需要添加fig.get_facecolor。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>from</th>\n",
       "      <th>to</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A</td>\n",
       "      <td>D</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>B</td>\n",
       "      <td>A</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>C</td>\n",
       "      <td>E</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A</td>\n",
       "      <td>C</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  from to\n",
       "0    A  D\n",
       "1    B  A\n",
       "2    C  E\n",
       "3    A  C"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# Build a dataframe with your connections\n",
    "df = pd.DataFrame({ 'from':['A', 'B', 'C','A'], 'to':['D', 'A', 'E','C'] })\n",
    "df\n",
    " \n",
    "# Build your graph\n",
    "G=nx.from_pandas_edgelist(df, 'from', 'to', create_using=nx.Graph() )\n",
    " \n",
    "# Custom the nodes:\n",
    "fig = plt.figure()\n",
    "nx.draw(G, with_labels=True, node_color='skyblue', node_size=1500, edge_color='white')\n",
    "# 设置背景颜色\n",
    "fig.set_facecolor(\"#00000F\")\n",
    " \n",
    "# If you want to save the figure to png:\n",
    "# 保存图像需要设定facecolor=fig.get_facecolor() ，否者背景颜色为白色\n",
    "# plt.savefig('yourname.png', facecolor=fig.get_facecolor()，dpi=300)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8. 来自相关性矩阵的网络 Network from correlation matrix\n",
    "本页说明了如何绘制相关网络：基于相关矩阵构建的网络。假设您有10个人，并且知道他们彼此之间的亲密关系。可以在网络中表示这些关系。每个人都是一个节点。如果2个人足够接近（我们设定了一个阈值），则它们由边链接。那将显示人口结构！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>5</td>\n",
       "      <td>13</td>\n",
       "      <td>6</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10</td>\n",
       "      <td>19</td>\n",
       "      <td>10</td>\n",
       "      <td>14</td>\n",
       "      <td>12</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>5</td>\n",
       "      <td>3</td>\n",
       "      <td>13</td>\n",
       "      <td>17</td>\n",
       "      <td>13</td>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>6</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>13</td>\n",
       "      <td>9</td>\n",
       "      <td>12</td>\n",
       "      <td>10</td>\n",
       "      <td>18</td>\n",
       "      <td>19</td>\n",
       "      <td>19</td>\n",
       "      <td>20</td>\n",
       "      <td>19</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "      <td>13</td>\n",
       "      <td>11</td>\n",
       "      <td>11</td>\n",
       "      <td>5</td>\n",
       "      <td>8</td>\n",
       "      <td>9</td>\n",
       "      <td>7</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>12</td>\n",
       "      <td>16</td>\n",
       "      <td>14</td>\n",
       "      <td>15</td>\n",
       "      <td>13</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1</td>\n",
       "      <td>7</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>11</td>\n",
       "      <td>14</td>\n",
       "      <td>14</td>\n",
       "      <td>14</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>11</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>9</td>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>7</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>4</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>8</td>\n",
       "      <td>10</td>\n",
       "      <td>8</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    A   B   C   D   E   F   G   H   I   J\n",
       "0   5  13   6   8   8   1   4   2   1   3\n",
       "1  10  19  10  14  12   1   3   4   4   5\n",
       "2   3   9   3   5   3  13  17  13  14  15\n",
       "3   4   6   5   4   5   4   7   4   7   4\n",
       "4   8  13   9  12  10  18  19  19  20  19\n",
       "5  10  13  13  11  11   5   8   9   7   9\n",
       "6  12  16  14  15  13   2   2   3   6   3\n",
       "7   1   7   6   3   4  11  14  14  14  11\n",
       "8   9  11   9   9   9   3   4   5   7   5\n",
       "9   4   9   4   7   4   8   8   8  10   8"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "      <th>G</th>\n",
       "      <th>H</th>\n",
       "      <th>I</th>\n",
       "      <th>J</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.816480</td>\n",
       "      <td>0.901905</td>\n",
       "      <td>0.936634</td>\n",
       "      <td>0.949857</td>\n",
       "      <td>-0.409401</td>\n",
       "      <td>-0.505922</td>\n",
       "      <td>-0.327200</td>\n",
       "      <td>-0.325622</td>\n",
       "      <td>-0.276172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.816480</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.706978</td>\n",
       "      <td>0.928908</td>\n",
       "      <td>0.876425</td>\n",
       "      <td>-0.380840</td>\n",
       "      <td>-0.440560</td>\n",
       "      <td>-0.291830</td>\n",
       "      <td>-0.369119</td>\n",
       "      <td>-0.214817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>0.901905</td>\n",
       "      <td>0.706978</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.830659</td>\n",
       "      <td>0.926892</td>\n",
       "      <td>-0.343944</td>\n",
       "      <td>-0.416735</td>\n",
       "      <td>-0.200915</td>\n",
       "      <td>-0.245105</td>\n",
       "      <td>-0.230368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>0.936634</td>\n",
       "      <td>0.928908</td>\n",
       "      <td>0.830659</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.939070</td>\n",
       "      <td>-0.282163</td>\n",
       "      <td>-0.397256</td>\n",
       "      <td>-0.212778</td>\n",
       "      <td>-0.229146</td>\n",
       "      <td>-0.151093</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>E</th>\n",
       "      <td>0.949857</td>\n",
       "      <td>0.876425</td>\n",
       "      <td>0.926892</td>\n",
       "      <td>0.939070</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.412766</td>\n",
       "      <td>-0.488815</td>\n",
       "      <td>-0.301198</td>\n",
       "      <td>-0.346611</td>\n",
       "      <td>-0.278961</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>-0.409401</td>\n",
       "      <td>-0.380840</td>\n",
       "      <td>-0.343944</td>\n",
       "      <td>-0.282163</td>\n",
       "      <td>-0.412766</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.972397</td>\n",
       "      <td>0.968543</td>\n",
       "      <td>0.975579</td>\n",
       "      <td>0.965554</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>G</th>\n",
       "      <td>-0.505922</td>\n",
       "      <td>-0.440560</td>\n",
       "      <td>-0.416735</td>\n",
       "      <td>-0.397256</td>\n",
       "      <td>-0.488815</td>\n",
       "      <td>0.972397</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.952668</td>\n",
       "      <td>0.923379</td>\n",
       "      <td>0.957782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>H</th>\n",
       "      <td>-0.327200</td>\n",
       "      <td>-0.291830</td>\n",
       "      <td>-0.200915</td>\n",
       "      <td>-0.212778</td>\n",
       "      <td>-0.301198</td>\n",
       "      <td>0.968543</td>\n",
       "      <td>0.952668</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.956089</td>\n",
       "      <td>0.973569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>I</th>\n",
       "      <td>-0.325622</td>\n",
       "      <td>-0.369119</td>\n",
       "      <td>-0.245105</td>\n",
       "      <td>-0.229146</td>\n",
       "      <td>-0.346611</td>\n",
       "      <td>0.975579</td>\n",
       "      <td>0.923379</td>\n",
       "      <td>0.956089</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.927947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>J</th>\n",
       "      <td>-0.276172</td>\n",
       "      <td>-0.214817</td>\n",
       "      <td>-0.230368</td>\n",
       "      <td>-0.151093</td>\n",
       "      <td>-0.278961</td>\n",
       "      <td>0.965554</td>\n",
       "      <td>0.957782</td>\n",
       "      <td>0.973569</td>\n",
       "      <td>0.927947</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B         C         D         E         F         G  \\\n",
       "A  1.000000  0.816480  0.901905  0.936634  0.949857 -0.409401 -0.505922   \n",
       "B  0.816480  1.000000  0.706978  0.928908  0.876425 -0.380840 -0.440560   \n",
       "C  0.901905  0.706978  1.000000  0.830659  0.926892 -0.343944 -0.416735   \n",
       "D  0.936634  0.928908  0.830659  1.000000  0.939070 -0.282163 -0.397256   \n",
       "E  0.949857  0.876425  0.926892  0.939070  1.000000 -0.412766 -0.488815   \n",
       "F -0.409401 -0.380840 -0.343944 -0.282163 -0.412766  1.000000  0.972397   \n",
       "G -0.505922 -0.440560 -0.416735 -0.397256 -0.488815  0.972397  1.000000   \n",
       "H -0.327200 -0.291830 -0.200915 -0.212778 -0.301198  0.968543  0.952668   \n",
       "I -0.325622 -0.369119 -0.245105 -0.229146 -0.346611  0.975579  0.923379   \n",
       "J -0.276172 -0.214817 -0.230368 -0.151093 -0.278961  0.965554  0.957782   \n",
       "\n",
       "          H         I         J  \n",
       "A -0.327200 -0.325622 -0.276172  \n",
       "B -0.291830 -0.369119 -0.214817  \n",
       "C -0.200915 -0.245105 -0.230368  \n",
       "D -0.212778 -0.229146 -0.151093  \n",
       "E -0.301198 -0.346611 -0.278961  \n",
       "F  0.968543  0.975579  0.965554  \n",
       "G  0.952668  0.923379  0.957782  \n",
       "H  1.000000  0.956089  0.973569  \n",
       "I  0.956089  1.000000  0.927947  \n",
       "J  0.973569  0.927947  1.000000  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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kQ7JdMHna/1ec76C79JLL6WhoYH77ruPlStXsnr1anplZofvVPfC5cYp8SIi0mGZLvgCvd8D7+/4ABoaGkhKSmLDhg2sXLmS9PR044twnequnp6ISIdnuuDztjF1S956fHV1ddx3330kJCQwYMAAUlJSWt/45anujCuhuOxyjrouaL29mc1unPbe8lR3ERHpFEx1OsPBgwc5efKk3/d70Dr4zp49y1133cXZs2d59913ueKKK6irqyM+Pt57BWnDePClWt5++59kXN6fz/a+z7fvvoMVq9ZBUqZ6diIinZipenxr1qxh1KhRft/vgWfw1dTUcOutt2Kz2ViwYAEXXnghffv2ZePGjT7vP3jwIJWVlcYxRg4ndYkX88kXCca5ego9EZFOzVTBF8z7PTj3ju/06dPceOONpKen88Ybb5CQkAC02L7Mi+LiYgoKCoiLM/76TYfYiohIp9chg69r164cP36cMWPG0LdvX/70pz/hcJwbtR09enTA4Lv22mubPiv4RESswzTBd+jQIU6cOBHw/R5AfX09y5cv5+qrr+all17CbvecoJKXl8eHH37I8ePHW93rdrtZtWoVhYWFHtcUfCIi1hC74HPVwMmdULkdTu5k3Zrl5OfnNw0/+vL555/zq1/9ih49evDCCy94DazExETy8vIoLi5u9d2+ffuora3l0ksvbbqm4BMRsY7ozuqs2Ax75sPRdXBiB7jrm766w22j6Jbz4f1HjGOF0oa1uv3gwYNcd911jBkzhu3bt/sNq8bhzttuu83jeuMwZ8t7FXwiItYQnR7fkbWwdDgsyYFd86Cy1CP0AOxxbno6DhvfL8kxyh9Z2/T93r17GTVqFA899BCPPPKI151bmhszZsy5Y4qaaTnMCUaPT0RErCGyweeqgZJJsCIfjm0K7d5jm4z7Sh7lk4+2kp+fz+TJk3nsscd8blnW3KBBg6iurmbPnj1N19xuN8XFxV6DTz0+ERFriFzw1VbCqiLYObd99eycw8kFX2XGk4/zgx/8APC9V2dzNpuNoqIij9mdO3fuJD4+nksuucSjrIJPRMQ6IhN8rhpYfSOUbwhLdVd/pY67L3jdqBdjHV+g4IPW6/kahzlbhpyCT0TEOiITfFunhC30mhxdD1unApCUlERVVVXAd3NFRUUUFxfjcrmA1uv3Gin4RESsI/zBd2Rt0MOb096G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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    " \n",
    "# I build a data set: 10 individuals and 5 variables for each\n",
    "ind1=[5,10,3,4,8,10,12,1,9,4]\n",
    "ind5=[1,1,13,4,18,5,2,11,3,8]\n",
    "# 建立矩阵\n",
    "df = pd.DataFrame({ 'A':ind1, 'B':ind1 + np.random.randint(10, size=(10)) , 'C':ind1 + np.random.randint(10, size=(10)) , 'D':ind1 + np.random.randint(5, size=(10)) , 'E':ind1 + np.random.randint(5, size=(10)), 'F':ind5, 'G':ind5 + np.random.randint(5, size=(10)) , 'H':ind5 + np.random.randint(5, size=(10)), 'I':ind5 + np.random.randint(5, size=(10)), 'J':ind5 + np.random.randint(5, size=(10))})\n",
    "df\n",
    " \n",
    "# Calculate the correlation between individuals. We have to transpose first, because the corr function calculate the pairwise correlations between columns.\n",
    "# 计算相关性\n",
    "corr = df.corr()\n",
    "corr\n",
    " \n",
    "# Transform it in a links data frame (3 columns only):\n",
    "# 将相关系数矩阵压平\n",
    "links = corr.stack().reset_index()\n",
    "# 设置列名\n",
    "links.columns = ['var1', 'var2','value']\n",
    "#links\n",
    " \n",
    "# Keep only correlation over a threshold and remove self correlation (cors (A,A)=1)\n",
    "# 剔除相同编号的行以及相关系数小于0.8的行\n",
    "links_filtered=links.loc[ (links['value'] > 0.8) & (links['var1'] != links['var2']) ]\n",
    "#links_filtered\n",
    " \n",
    "# Build your graph\n",
    "# 作图\n",
    "G=nx.from_pandas_edgelist(links_filtered, 'var1', 'var2')\n",
    " \n",
    "# Plot the network:\n",
    "nx.draw(G, with_labels=True, node_color='orange', node_size=500, edge_color='black', linewidths=5, font_size=15)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
